// CommonJS
const crypto = require('crypto');

/**
 * 加密字符串
 * @param {String} raw_password 原始待加密字符串
 */
function passwordEncoder(raw_password) {
    return crypto
        .createHmac('sha256', 'test secret')
        .update(raw_password)
        .digest('hex');
}

/**
 * 获取指定长度随机字符
 * @param {Number} len 获取指定长度字符串
 * @param {String} allowSequence 指定待选择的字符序列
 */
function randomString(len = 16, allowSequence) {
    allowSequence =
        allowSequence ||
        'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';

    let arr = [];
    while (len--) {
        // Math.random() 去 0 ~ 1 之间的小数
        // string 是一个类似数组的数据类型，它有 length 属性，也可通过下标去指定位置的字符
        arr.push(
            allowSequence[Math.floor(Math.random() * allowSequence.length)],
        );
    }
    return arr.join('');
}

/**
 * 打乱数组
 */
function randomArr(arr) {
    if (!arr || arr.length === 0) {
        return null;
    }

    return arr.sort(() => {
        // 0 到 1 之间随机小数
        return Math.random() > 0.5 ? 1 : -1;
    });
}

module.exports = { passwordEncoder, randomString, randomArr };

// exports.passwordEncoder = function(raw_password) {};
